Day 10: ELK Stack 安裝與多節點
Day 11: Logstash 配置與查詢系統日誌
Day 12: Redis 安裝與配置
Day 13: Redis 高可用性與集群設置
Day 14: Prometheus 與 Grafana 安裝與監控
Day 15: 配置 Prometheus 監控 Kubernetes 叢集
Day 16: 使用 Grafana 進行數據視覺化及串接告警
ELK Stack 是一套開源工具組合,用於日誌和數據分析。它包括 Elasticsearch(分佈式搜索和分析引擎)、Logstash(數據收集和處理工具)和 Kibana(數據可視化平台)。ELK Stack 可以集中收集、索引和分析日誌數據,並通過直觀的儀表板進行可視化,幫助企業實時監控和排查問題。
今天採用的腳本來自Github,是單機三集群版本
作者deviantony/專案docker-elk
為什麼不採用bitnami的?
因為ELK Stack是個集成的服務,且很多情況需要多節點支撐
如果還要一個一個去架就太複雜也太不方便了
安裝git
sudo apt-get install git
下載專案
git clone https://github.com/deviantony/docker-elk.git
執行初始安裝腳本
docker-compose up setup
運行ELK集成
docker-compose up
驗證是否安裝成功
curl http://localhost:9200 -u elastic:changeme
逐一進入服務重置密碼(會打印在畫面上)
#elasticsearch
docker-compose exec elasticsearch bin/elasticsearch-reset-password --batch --user elastic
#logstash
docker-compose exec elasticsearch bin/elasticsearch-reset-password --batch --user logstash_internal
#kibana
docker-compose exec elasticsearch bin/elasticsearch-reset-password --batch --user kibana_system
如果想要將changeme直接修改為自己的預設密碼,可以編輯.env文件之後再up服務
瀏覽器打開 http://localhost:5601
現在尚無任何資料,請跟著下一篇學習加入系統日誌

kibana後台無法訪問
檢查你的es是否沒起來,kibana需要依賴es起來才會跟著起來
查看es日誌發現以下
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
sudo nano /etc/sysctl.conf
在最末尾貼入以下內容
vm.max_map_count=262144
存檔之後套用
sysctl -p
套用了之後再次docker compose up服務即可
請保留原本git clone下來的專案(或複製一份出來)
將底下的docker-compose.yml腳本
改寫成各節點獨立一份,再到多個機器上部署
version: '3.7'
services:
  elasticsearch01:
    build:
      context: elasticsearch/
      args:
        ELASTIC_VERSION: ${ELASTIC_VERSION}
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro,z
      - ./volumes/elasticsearch01:/usr/share/elasticsearch/data:z
    #指定運行的用戶
    user: "1000:0"
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      ES_JAVA_OPTS: -Xms512m -Xmx512m
      ELASTIC_PASSWORD: ${ELASTIC_PASSWORD:-}
      #宣告自己的主機地址
      network.publish_host: 192.168.10.1
      node.name: elasticsearch01
      #允許成為master節點
      node.master: true
      #允許成為data節點
      node.data: true
      #其實可以把節點的角色寫死,這裡不寫死
      node.roles: master,data
      discovery.seed_hosts: "192.168.10.2,192.168.10.3"
      cluster.initial_master_nodes: 192.168.10.1,192.168.10.2,192.168.10.3
    networks:
      - elk
networks:
  elk:
    driver: bridge
第二份和第三份也一樣
只需修改四處有關節點ip及名稱之處
然後在任意一台上安裝logstash及kibana即可
logstash
version: '3.7'
services:
  logstash:
    build:
      context: logstash/
      args:
        ELASTIC_VERSION: ${ELASTIC_VERSION}
    volumes:
      - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro,Z
      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro,Z
    user: "1000:0"
    ports:
      - 5044:5044
      - 50000:50000/tcp
      - 50000:50000/udp
      - 9600:9600
    environment:
      LS_JAVA_OPTS: -Xms256m -Xmx256m
      LOGSTASH_INTERNAL_PASSWORD: ${LOGSTASH_INTERNAL_PASSWORD:-}
    networks:
      - elk
    restart: unless-stopped
networks:
  elk:
    driver: bridge
kibana
version: '3.7'
services:
  kibana:
    build:
      context: kibana/
      args:
        ELASTIC_VERSION: ${ELASTIC_VERSION}
    volumes:
      - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro,Z
    user: "1000:0"
    ports:
      - 5601:5601
    environment:
      KIBANA_SYSTEM_PASSWORD: ${KIBANA_SYSTEM_PASSWORD:-}
    networks:
      - elk
    restart: unless-stopped
networks:
  elk:
    driver: bridge

後台查看節點已運行在不同主機上
查看方式:登入kibana > 主頁找到Monitor the stack > Nodes
以上,ELK Stack初步的搭建就到此告一段落